#include <iostream>

class Base
{};

class Derived:public Base
{};

int main()
{
    // int a = 10;
    // int *p = &a;

    // // 用于void*和普通指针之间的转化
    // void *ptr = static_cast<void*>(p);
    // p = static_cast<int*>(ptr);
    
    // //不能用于不同类型指针之间的转换
    // double *pd = static_cast<double*>(p);
    
    // //基本数据类型都可以转换
    // double c = static_cast<double>(a);

    // //static_cast 向上向下都是支持的,但是向下转型不安全
    // Base b;
    // Derived d;
    // //向上转型
    // Base *p = static_cast<Base*>(&d);
    // //向下转型:不安全
    // Derived *pd = static_cast<Derived*>(&b);


    // //动态转换:父子对象之间的转换
    // Base b;
    // Derived d;
    // //向上转型
    // Base *p = dynamic_cast<Base*>(&d);
    // //dynamic_cast不允许向下转型
    // Derived *pd = dynamic_cast<Derived*>(&b);
    
    // //const转换
    const int a = 10;
    int *p = const_cast<int*>(&a);
    *p = 20;
    std::cout<<a<<std::endl;
    std::cout<<*p<<std::endl;


    // //reinterpret_cast相当于强制类型转换
    // int a = 10;
    // reinterpret_cast<double*>(&a);
    // return 0;
}